Multivalued memory cells such as a MLC (Multi-Level Cell) have been developed for non-volatile memories such as a NAND EEPROM (Electrically Erasable Programmable Read-Only Memory). Because the threshold value range of each level of data is relatively narrow in the MLC, the threshold value distribution of memory cells is demanded to be as narrow as possible.